//package net.dontdrinkandroot.example.angularrestspringsecurity.rediscache;
//
//import java.io.ByteArrayInputStream;
//import java.io.ByteArrayOutputStream;
//import java.io.IOException;
//import java.io.ObjectInputStream;
//import java.io.ObjectOutputStream;
//
//import org.springframework.cache.Cache;
//import org.springframework.cache.support.SimpleValueWrapper;
//import org.springframework.dao.DataAccessException;
//import org.springframework.data.redis.connection.RedisConnection;
//import org.springframework.data.redis.core.RedisCallback;
//import org.springframework.data.redis.core.RedisTemplate;
//
///**
// * @ClassName: RedisCache
// * @Description: TODO(这里用一句话描述这个类的作用)
// * @author tjf
// * @date 2016年6月25日下午5:22:26
// * @Version V1.00
// */
//public class RedisCache implements Cache {
//
//	private RedisTemplate<String, Object> redisTemplate;
//	private String name;
//
//	public RedisTemplate<String, Object> getRedisTemplate() {
//		return redisTemplate;
//	}
//
//	public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) {
//		this.redisTemplate = redisTemplate;
//	}
//
//	public void setName(String name) {
//		this.name = name;
//	}
//
//	@Override
//	public String getName() {
//		return this.name;
//	}
//
//	@Override
//	public Object getNativeCache() {
//		return this.redisTemplate;
//	}
//
//	@Override
//	public ValueWrapper get(Object key) {
//		
//		final String keyf = (String) key;
//		Object object = null;
//		object = redisTemplate.execute(new RedisCallback<Object>() {
//			public Object doInRedis(RedisConnection connection) throws DataAccessException {
//
//				byte[] key = keyf.getBytes();
//				byte[] value = connection.get(key);
//				if (value == null) {
//					return null;
//				}
//				return toObject(value);
//
//			}
//		});
//		return (object != null ? new SimpleValueWrapper(object) : null);
//	}
//
//	@Override
//	public <T> T get(Object o, Class<T> aClass) {
//		return null;
//	}
//
//	@Override
//	public void put(Object key, Object value) {
//		final String keyf = (String) key;
//		final Object valuef = value;
//		final long liveTime = 86400;
//
//		redisTemplate.execute(new RedisCallback<Long>() {
//			public Long doInRedis(RedisConnection connection) throws DataAccessException {
//				byte[] keyb = keyf.getBytes();
//				byte[] valueb = toByteArray(valuef);
//				connection.set(keyb, valueb);
//				if (liveTime > 0) {
//					connection.expire(keyb, liveTime);
//				}
//				return 1L;
//			}
//
//		});
//	}
//
//	@Override
//	public ValueWrapper putIfAbsent(Object o, Object o1) {
//		return null;
//	}
//
//	/**
//	 * @param obj
//	 * @return
//	 */
//	private byte[] toByteArray(Object obj) {
//		byte[] bytes = null;
//		ByteArrayOutputStream bos = new ByteArrayOutputStream();
//		try {
//			ObjectOutputStream oos = new ObjectOutputStream(bos);
//			oos.writeObject(obj);
//			oos.flush();
//			bytes = bos.toByteArray();
//			oos.close();
//			bos.close();
//		} catch (IOException ex) {
//			ex.printStackTrace();
//		}
//		return bytes;
//	}
//
//	/**
//	 *
//	 * @param bytes
//	 * @return
//	 */
//	private Object toObject(byte[] bytes) {
//		Object obj = null;
//		try {
//			ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
//			ObjectInputStream ois = new ObjectInputStream(bis);
//			obj = ois.readObject();
//			ois.close();
//			bis.close();
//		} catch (IOException ex) {
//			ex.printStackTrace();
//		} catch (ClassNotFoundException ex) {
//			ex.printStackTrace();
//		}
//		return obj;
//	}
//
//	@Override
//	public void evict(Object key) {
//		final String keyf = (String) key;
//		redisTemplate.execute(new RedisCallback<Long>() {
//
//			public Long doInRedis(RedisConnection connection) throws DataAccessException {
//				return connection.del(keyf.getBytes());
//			}
//
//		});
//	}
//
//	/* 
//	 * @Name: clear
//	 * @Description: 删除所有记录
//	 * @Author: tjf
//	 * @Version: V1.00
//	 * @CreateDate: 2016年6月25日下午5:31:50
//	 */
//	@Override
//	public void clear() {
//		redisTemplate.execute(new RedisCallback<String>() {
//			public String doInRedis(RedisConnection connection) throws DataAccessException {
//				connection.flushDb();
//				return "ok";
//			}
//		});
//	}
//}
